/**
 * @author harry
 * @date 2022/3/2/10:18
 */

package com.serviceOrchestration.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AtomicParam {
    /**
     * @return 参数中文名，前端显示用
     */
    String zhName();

    /**
     * @return 参数英文名，前端参数传递用
     */
    String enName();

    /**
     * 输入参数方式：InputType.java
     * @return 对参数输入类型的描述：文本/数字/单选/多选/...
     */
    String type();

    /**
     * dao层数据来源指定
     * 如果type是选择型且需要查表，需要指定对应dao层bean的名字及方法，<br/>
     * 格式为：daoName.methodName
     * @return 如areaDao.selectAll。为空串则不是查表型选择
     */
    String repository() default "";

    /**
     * 取值限制
     * @return 1. 一般文本输入（数字、字母）——空，由前端负责校验；
     * <p>2. 特殊文本输入——输入值的正则，可以多种正则</p>
     * <p>3. 查表选择——空，转换成 {@code AtomicParam} 时用 {@code daoName} 实例注入离散值集合</p>
     * <p>4. 有限选择——指定值域</p>
     */
    String[] constraints() default {};
}
